import header from '@/const/header';
import { message } from 'antd';

// 初始化sdk
import './utils/init-leancloud-sdk'

function codeMessageFun(status, method) {
  switch (status) {
    case 200:
      return method == 'GET' ? '服务器成功返回请求的数据。' : method == 'DELETE' ? '删除数据成功' : '更新数据成功。';
    case 201:
      return method == 'POST' ? '新建数据成功。' : '更新数据成功。';
    case 202:
      return '一个请求已经进入后台排队（异步任务）。';
    case 204:
      return '删除数据成功。';
    case 400:
      return `发出的请求有错误，服务器没有进行${
        method == 'POST' ? '新建' : '修改' 
      }数据的操作。`;
    case 401:
      return '用户没有权限（用户名密码错误）。';
    case 403:
      return '用户得到授权，但是访问是被禁止的。';
    case 404:
      return '发出的请求针对的是不存在的记录，服务器没有进行操作。';
    case 406:
      return '请求的格式不可得。';
    case 408:
      return '请求超时。';
    case 410:
      return '请求的资源被永久删除，且不会再得到的。';
    case 422:
      return '当创建一个对象时，发生一个验证错误。';
    case 500:
      return '服务器发生错误，请检查服务器。';
    case 502:
      return '网关错误（nginx反向代理）。';
    case 503:
      return '服务不可用，服务器暂时过载或维护。';
    case 504:
      return '网关超时（nginx反向代理）。';
    default:
      return '未知错误';
  }
}

// 请求拦截器
const requestInterceptors = (url, options) => {
  // console.log('请求拦截器',url,options)
  // 配置leanCloud请求头
  options.url = 'https://zllrjpn7.lc-cn-n1-shared.com/1.1/classes' + url;
  options.headers = {
    'X-LC-Id': header.XLCID,
    'X-LC-Key': header.XLCKEY,
    'Content-Type': 'application/json',
  };
  console.log('请求拦截器', url, options);
  return options;
};

// 响应拦截器
const responseInterceptors = async (res, options) => {
  console.log('响应拦截器', res, options);
  let { status } = res;
  let { method } = options;

  let response = await res.json();
  //  修改、更新、删除时，弹出提示
  if (method == 'POST' || method == 'PUT' || method == 'DELETE') {
    if (status.toString().startsWith('2')) {
      message.success(codeMessageFun(status, method));
    } else {
      message.error(codeMessageFun(status, method));
    }
  }
  return {
    code: status.toString().startsWith('2') ? 200 : status,
    data: response.results || response.data || response,
    message: codeMessageFun(status, method),
  };
};

export const request = {
  timeout: 3000,
  /**
   * errorConfig
   * @description: 请求错误处理
   * 当后端接口不满足该规范的时候你需要通过该配置把后端接口数据转换为该格式，
   * 该配置只是用于错误处理，不会影响最终传递给页面的数据格式。
   */
  errorConfig: {
    adaptor: (resData) => {
      return {
        success: resData.success,
        data: resData.data,
        message: resData.message,
      };
    },
  },
  /**
   * umi-request 提供中间件机制，
   * 之前是通过 request.use(middleware) 的方式引入，
   * 现在可以通过 request.middlewares 进行配置。
   */
  requestInterceptors: [requestInterceptors],
  responseInterceptors: [responseInterceptors],
  // errorHandler: async (error) => {
  //     const { response } = error;
  //     if (response && response.status) {
  //         const errorText = codeMessage[response.status] || response.statusText;
  //         console.log('请求错误')
  //     } else if (!response) {
  //         console.log('网络异常')
  //     }
  //     return response;
  // },
};
